Состав релиза
- Релизные скрипты:
- Элементы дистрибутива:
- Docker-образы:
- Конфигурационные изменения:
- Helm чарты:
Зависимые релизы
Укажите зависимые релизы, если такие имеются
Порядок установки релиза
Последовательность установки | |
|---|---|
Последовательность установки | |
| 1 | Скрипты БД |
| 2 | Топики кафка |
| 3 | Компоненты |
| 4 | Балансировщики |
Список изменений
- Изменения, специфичные для этого релиза. Например, изменения конфигурационных файлов, обновления версий ПО, изменения в самой инфраструктуре и т.д. Заполняется командами разработки до фиксации плана релиза
- Для изменений конфигурации следует указывать конфигурационные элементы - см. configuration в distr.xml или configuration/ervu
Включено | Тикет разработки | Тикет на подготовку | Изменение (название раздела плана установки) | Ответственный | Проверено | Комментарий |
|---|---|---|---|---|---|---|
Включено | Тикет разработки | Тикет на подготовку | Изменение (название раздела плана установки) | Ответственный | Проверено | Комментарий |
1. Сборка и запуск ervu-journal-service
- Для подключения сервиса к slave (readonly) ноде установить значения переменных PG_USER_RO, PG_PASSWORD_RO, PG_HOST_RO, PG_PORT_RO, PG_DATABASE_RO
Выполнить скрипты на добавление колонки и индекса
ALTER TABLE object_versionsADD COLUMN IF NOT EXISTS source_last_update INTEGER;CREATE INDEXifnot exists object_versions_recruit_update_idxON object_versions (id)INCLUDE (recruitment_id)WHERE object_type ='Recruit'AND source_last_update =1;CREATE INDEXifnot exists object_history_version_update_idxON object_history (version_id)WHERE operation_type ='UPDATE';SET timezone ='UTC';ALTER TABLE auth_journalALTER time_created TYPE timestamptz;ALTER TABLE import_events_journalALTER event_time TYPE timestamptz;ALTER TABLE import_journal_finishALTER start_time TYPE timestamptz;ALTER TABLE import_journal_finishALTER finish_time TYPE timestamptz;ALTER TABLE import_journal_startALTER start_time TYPE timestamptz;ALTER TABLE import_journal_startALTER finish_time TYPE timestamptz;ALTER TABLE import_resultsALTER created_date TYPE timestamptz;ALTER TABLE journalALTER time_created TYPE timestamptz;ALTER TABLE object_historyALTER time_created TYPE timestamptz;ALTER TABLE object_versionsALTER time_created TYPE timestamptz;ALTER TABLE uploaded_filesALTER start_time TYPE timestamptz;ALTER TABLE uploaded_filesALTER finish_time TYPE timestamptz;ALTER TABLE ui_action_journalALTER event_time TYPE timestamptz;- Собрать и запустить сервис стандартным образом через helm, убрав риднеспробы
После установки сервиса необходимо
Выполнить скрипт на обновление историчных записей - в скрипте несколько операций, необходимо выполнить каждую в указанном порядке. После каждого шага прошу сохранять тайминг выполнения а так же скрин результата выполнения шага. Отправлять в чат сопровождения Express или напрямую в личку Воронин Андрей Сергеевич
Внимание! на тестовом стенде скрипт выполнялся 1 минуту при 353000 записях. На продуктиве расчётное время выполнения > 4 часов. Не ожидать завершения выполнения, после запуска скрипта перейти на следующий шаг.-- После установки новой версии ervu-journal-- Убрать констрейн с историй (потом вернём)ALTER TABLE object_history DROP CONSTRAINT object_history_version_id_fkey;-- Создать новую таблицуCREATE TABLE object_versions_new (LIKE object_versions INCLUDING ALL);-- Наполнить новую таблицуINSERT INTO object_versions_new (id, object_id, version, time_created, object, object_type, user_id, main_vk_id, event_trace_id, recruitment_id, previous_version_id, next_version_id, source_last_update)SELECT id, object_id, version, time_created, object, object_type, user_id, main_vk_id, event_trace_id, recruitment_id, previous_version_id, next_version_id,(convert_from(object,'UTF8')::json->>'sourceLastUpdate')::intFROM object_versions ORDER BY time_created desc;-- Проверить новую таблицу-- Переименовать таблицыALTER TABLE object_versions RENAME TO object_versions_old;ALTER TABLE object_versions_new RENAME TO object_versions;-- Добавить констрейнтыALTER TABLE object_versions ADD CONSTRAINT object_versions_previous_version_id_fkey FOREIGN KEY (previous_version_id) REFERENCES object_versions(id);ALTER TABLE object_versions ADD CONSTRAINT object_versions_next_version_id_fkey FOREIGN KEY (next_version_id) REFERENCES object_versions(id);-- Вернуть констрейнтыALTER TABLE object_history ADD CONSTRAINT object_history_version_id_fkey FOREIGN KEY (version_id) REFERENCES object_versions(id);-- Проверить, что существует индекс object_versions_recruit_update_idx на object_versions, если его нет, создатьCREATE INDEXifnot exists object_versions_recruit_update_idxON object_versions (id)INCLUDE (recruitment_id)WHERE object_type ='Recruit'AND source_last_update =1;-- Перепроверить, удалить старую таблицуDROP TABLE object_versions_old;-- АнализANALYZE object_versions;
2. Выполнение скриптов создания materialized view
Выполнение следующих пунктов создания view можно выполнять параллельно
Выполнить запрос создания materialize view бд ervu_person_registry
CREATE MATERIALIZED VIEW IF NOT EXISTS ervu_person_registry_count ASWITHREG_OVER_18 as (SELECT coalesce(current_recruitment_id, target_recruitment_id) recruitment, count(*) reg_over_18_count from recruitswhere vu_current_info ->>'recruitmentConversion'='false'and recruits.system_pgs_status notnull and(target_recruitment_id notnull and current_recruitment_id isnull) and(birth_date <= make_date ( date_part('year', NOW())::int-18,12,31))group by recruitment),MILITARY_REGISTRATION as (select rpf.requested_recruitment_id recruitment, count(*) military_registration_count from recruit_private_file rpf where rpf.recruit_private_file_status_id ='e9e58951-4efa-4952-b7ae-6977ee751b25'and rpf.requested_recruitment_id ='9703f108-761a-467a-aad3-89617e5539ed'AND NOT EXISTS( select *from system_document_dto sdwhere sd.recruit_id = rpf.recruit_id AND sd.status ='formed'AND sd.type ='7')AND NOT EXISTS( SELECT *from decision decwhere dec.recruit_id = rpf.recruit_id AND dec.status ->>'code'='1'AND dec.type ->>'code'='7')group by rpf.requested_recruitment_id),REMOVED as (SELECT current_recruitment_id recruitment, count(*) removed_count from recruitswhere vu_current_info ->>'removeRegInProgress'='true'and current_recruitment_id notnullgroup by current_recruitment_id ),PERSONAL_FILE as (select rpf.sending_recruitment_id recruitment, count(*) person_file_count from recruit_private_file rpfinner joinpublic.recruit_private_file_status pfst on pfst.id = rpf.recruit_private_file_status_idinner join recruits r on r.id = rpf.recruit_idinner join recruits_info ri on r.id = ri.recruit_idleft join documents docON r.id = doc.recruit_idinner join recruitment rec_sending_pf on rec_sending_pf.id = rpf.sending_recruitment_idinner join recruitment rec_requested_pf on rec_requested_pf.id = rpf.requested_recruitment_idwhere rpf.recruit_private_file_status_id not in ('aa94451f-5611-4a9e-bbe3-425a41110baa')group by rpf.sending_recruitment_id),BATCH_SIGNING as (with find_decision as (select d.recruit_id as find_recruit_id,d.recruitment_id as recruitment_idfrom decision dwhere not exists (select1from subpoena_dto sabpwhere sabp.recruit_id = d.recruit_id and (sabp.status ->>'code'='3.7'or sabp.status ->>'code'='3.13'))and d.status ->>'code'='1'union allselect sd.recruit_id as find_recruit_id,sd.recruitment_id as recruitment_idfrom system_document_dto sd left join subpoena_dto sabp on sabp.recruit_id = sd.recruit_id and (sabp.status ->>'code'='3.7'or sabp.status ->>'code'='3.13')where not exists (select1from subpoena_dto sabpwhere sabp.recruit_id = sd.recruit_id and (sabp.status ->>'code'='3.7'or sabp.status ->>'code'='3.13')) and sd.status ='formed')SELECTfd.recruitment_id recruitment,count(distinct rec.id) batch_signing_countfrom recruits recinner join find_decision fd on fd.find_recruit_id = rec.idgroup by fd.recruitment_id),CONVERSION_LOG as (SELECT target_recruitment_id recruitment, count(*) conversion_log_count from recruitswhere system_pgs_status in ('12','12.13','12.14','12.15','12.17') group by target_recruitment_id ),CONVERSION_MANUAL as (SELECT coalesce(target_recruitment_id, current_recruitment_id) recruitment, count(*) conversion_manual_countfrom recruits where system_pgs_status in ('12.2','12.5','12.7','12.8')group by target_recruitment_id, current_recruitment_id),CONVERSION_ERROR as (select rec.id recruitment, count(*) convertion_error_count from recruit_association assinner join recruit_association_status stat on stat.id = ass.recruit_association_status_idleft join recruitment rec on ass.vk_code = rec.codewhere stat.code !='processed'group by rec.id),CONSCRIPTION as (SELECT current_recruitment_id recruitment, count(*) conscription_count from recruitswhere conscription istrueand system_pgs_status not in ('1.2','1.3')group by current_recruitment_id ),INITIAL_MIL_REG_17 as (SELECT target_recruitment_id recruitment, count(*) initial_mil_reg_17_count from recruitswhere ( birth_date > make_date ( date_part('year', NOW())::int-18,12,31))and system_pgs_status in ('1','8.3') group by target_recruitment_id ),RECRUITS_FOR_LIST as (SELECT coalesce(current_recruitment_id, target_recruitment_id) recruitment, count(*) recruits_for_list_count from recruitsWHERE system_id_ern IS NOT NULLand (birth_date <= make_date ( date_part('year', NOW())::int-18,12,31))and system_pgs_status = any ('{1, 1.2, 15}')group by recruitment),DEFERMENT as (SELECT coalesce(current_recruitment_id, target_recruitment_id) recruitment, count(*) deferment_countfrom recruits rinner join decision_deferment_dto dec on dec.recruit_id = r.id and dec.hidden =falsewhere system_pgs_status NOT IN ('1.3','1.4') group by recruitment ),DEFERMENT_EXPECTED as (SELECT coalesce(current_recruitment_id, target_recruitment_id) recruitment,count(*) deferment_expected_countfrom recruits rinner join recruits_deferment rd on rd.recruit_id = r.id and rd.hidden =falsewhere system_pgs_status NOT IN ('1.3','1.4')group by recruitment)select coalesce(ro18.recruitment, milr.recruitment, rem.recruitment, pf.recruitment, bs.recruitment) recruitment,coalesce(ro18.reg_over_18_count,0) reg_over_18_count,coalesce(milr.military_registration_count,0) military_registration_count,coalesce(rem.removed_count,0) removed_count,coalesce(pf.person_file_count,0) person_file_count,coalesce(bs.batch_signing_count,0) batch_signing_count,coalesce(cl.conversion_log_count,0) conversion_log_count,coalesce(cm.conversion_manual_count,0) conversion_manual_count,coalesce(ce.convertion_error_count,0) convertion_error_count,coalesce(co.conscription_count,0) conscription_count,coalesce(mr.initial_mil_reg_17_count,0) initial_mil_reg_17_count,coalesce(rfl.recruits_for_list_count,0) recruits_for_list_count,coalesce(def.deferment_count,0) deferment_count,coalesce(de.deferment_expected_count,0) deferment_expected_countfrom REG_OVER_18 ro18full join MILITARY_REGISTRATION milr on ro18.recruitment = milr.recruitmentfull join REMOVED rem on ro18.recruitment = rem.recruitmentfull join PERSONAL_FILE pf on ro18.recruitment = pf.recruitmentfull join BATCH_SIGNING bs on ro18.recruitment = bs.recruitmentfull join CONVERSION_LOG cl on ro18.recruitment = cl.recruitmentfull join CONVERSION_MANUAL cm on ro18.recruitment = cm.recruitmentfull join CONVERSION_ERROR ce on ro18.recruitment = ce.recruitmentfull join CONSCRIPTION co on ro18.recruitment = co.recruitmentfull join INITIAL_MIL_REG_17 mr on ro18.recruitment = mr.recruitmentfull join RECRUITS_FOR_LIST rfl on ro18.recruitment = rfl.recruitmentfull join DEFERMENT def on ro18.recruitment = def.recruitmentfull join DEFERMENT_EXPECTED de on ro18.recruitment = de.recruitment;COMMENT ON COLUMN ervu_person_registry_count.reg_over_18_count IS'Количество граждан для раздела первоначальная постановка старше 18';COMMENT ON COLUMN ervu_person_registry_count.military_registration_count IS'Количество граждан для раздела состоящие на учете';COMMENT ON COLUMN ervu_person_registry_count.removed_count IS'Количество граждан для раздела снятых с учета';COMMENT ON COLUMN ervu_person_registry_count.person_file_count IS'Количество граждан для раздела запросы личных дел';COMMENT ON COLUMN ervu_person_registry_count.batch_signing_count IS'Количество граждан для раздела запросы пакетное подписание решения';COMMENT ON COLUMN ervu_person_registry_count.conversion_log_count IS'Количество граждан для раздела задания на конвертацию';COMMENT ON COLUMN ervu_person_registry_count.conversion_manual_count IS'Количество граждан для раздела ручная конвертация';COMMENT ON COLUMN ervu_person_registry_count.convertion_error_count IS'Количество граждан для раздела ошибки конвертации';COMMENT ON COLUMN ervu_person_registry_count.conscription_count IS'Количество граждан для раздела граждане подлежащие вызову';COMMENT ON COLUMN ervu_person_registry_count.initial_mil_reg_17_count IS'Количество граждан для раздела первоначальная 17 лет';COMMENT ON COLUMN ervu_person_registry_count.recruits_for_list_count IS'Количество граждан для раздела списки на вызов';COMMENT ON COLUMN ervu_person_registry_count.deferment_count IS'Количество граждан для раздела отсрочка / освобождение';COMMENT ON COLUMN ervu_person_registry_count.deferment_expected_count IS'Количество граждан для раздела имеющие право на отсрочку';Выполнить запрос создания materialize view бд ervu_subpoena_registry
CREATE MATERIALIZED VIEW IF NOT EXISTS v_subpoena_count ASwith subpoenas as (SELECT s.department_id, count(*) count_subpoenafrom subpoena sleft join recruit_block_list rbl ON rbl.recruit_id = s.recruit_idWHERE rbl.id isnullgroup by s.department_id),batch_signing as (SELECT s.department_id, count(*) count_batch_signingfrom subpoena sleft join recruit_block_list rbl ON rbl.recruit_id = s.recruit_idjoin subpoena_status ss on s.status_id = ss.idWHERE rbl.id isnullAND ss.code in ('3.7','3.13')AND summon_list_id isnullAND extra_info ->>'signBlocked'!='true'group by s.department_id)select coalesce(sb.department_id, bs.department_id) as department_id, coalesce(count_subpoena,0) count_subpoena, coalesce(count_batch_signing,0) count_batch_signingfrom subpoenas sbfull join batch_signing bs on sb.department_id = bs.department_id;COMMENT ON COLUMN v_subpoena_count.count_subpoena IS'Количество повесток';COMMENT ON COLUMN v_subpoena_count.count_batch_signing IS'Количество повесток для пакетного подписания';Выполнить запрос создания materialize view бд ervu_summon_list_registry
CREATE MATERIALIZED VIEW IF NOT EXISTS v_summon_list_count ASwith list as (SELECT department_id, summon_objective ='301'as mobilization_flag, count(*) count_listfrom summon_list slgroup by department_id, mobilization_flag)select department_id, mobilization_flag, coalesce(count_list,0) count_listfrom list;COMMENT ON COLUMN v_summon_list_count.count_list IS'Количество списков на вызов';Выполнить запрос создания materialize view бд ervu_incidents
CREATE MATERIALIZED VIEW IF NOT EXISTS incident_count ASwith archive_incidents as (SELECT coalesce(current_recruitment_id, target_recruitment_id) recruitment, count(*) count_archivefrom incidentleft join recruit_block_list rbl ON rbl.recruit_id = incident.recruit_idleft join incidents_error_code iec on incident.error_code_id = iec.idleft join recruits r on incident.recruit_id = r.idWHERE rbl.id isnullAND status in ('5','6','7','1000')AND iec.type !='1'AND iec.type !='2'group by recruitment),active_incidents as (SELECT coalesce(current_recruitment_id, target_recruitment_id) recruitment, count(*) count_activefrom incidentleft join recruit_block_list rbl ON rbl.recruit_id = incident.recruit_idleft join incidents_error_code iec on incident.error_code_id = iec.idleft join recruits r on incident.recruit_id = r.idWHERE rbl.id isnullAND status not in ('5','6','7','1000')AND iec.type !='1'AND iec.type !='2'group by recruitment)select coalesce(aci.recruitment, ari.recruitment) recruitment, coalesce(count_active,0) count_active, coalesce(count_archive,0) count_archivefrom active_incidents acifull join archive_incidents ari on aci.recruitment = ari.recruitment;COMMENT ON COLUMN incident_count.count_active IS'Количество инцидентов в статусе "активный"';COMMENT ON COLUMN incident_count.count_archive IS'Количество инцидентов в статусе "архивный"';- Перед запуском на бд ervu_geps_notifications применить скрипт для view
CREATE MATERIALIZED VIEW IF NOT EXISTS geps_notifications_count ASSELECTvk_id recruitment,coalesce(count(*),0) geps_countFROM notificationswhere not exists (select1from recruit_block_list rbl where rbl.recruit_id = notifications.recruit_id)group by recruitment;COMMENT ON COLUMN geps_notifications_count.geps_count IS'Количество уведомлений';
3.Сборка и запуск ervu-person-registry
Перед запуском на бд ervu_person_registry применить скрипт для создания индекса
CREATE EXTENSION IF NOT EXISTS pg_trgm;CREATE INDEXifnot exists recruits_addresses_reg_upper_gist_idx ON recruitsUSING gin ((addresses ->0->>'reg') gin_trgm_ops);--1)CREATE INDEX IF NOT EXISTS recruits_vu_current_info_waservumilitaryregistered_idxON recruits((vu_current_info ->>'wasErvuMilitaryRegistered'))WITH (deduplicate_items=True);analyze recruits;--2)CREATE INDEX IF NOT EXISTS recruits_system_doc_id_date_idxON recruits(system_doc_id_date)WITH (deduplicate_items=True);--3)CREATE INDEX IF NOT EXISTS recruits_vu_unset_date_idxON recruits(vu_unset_date)WITH (deduplicate_items=True);-4)alter tableifexists recruitsadd column IF NOT EXISTS reject_recruitment_id uuid;alter tableifexists recruitsadd foreign key (reject_recruitment_id) references recruitment (id)on update cascade;ALTER TABLEifexists recruitsADD COLUMNifnot exists reject_name_vk varchar;COMMENT on column recruits.reject_recruitment_id is'ИД отклонившего ВК';COMMENT on column recruits.reject_name_vk is'Наименование отклонившего ВК';CREATE INDEX IF NOT EXISTS recruit_reject_name_vk_upper_idx ON recruits using btree(UPPER(reject_name_vk) varchar_pattern_ops)WITH (deduplicate_items=True);CREATE INDEX IF NOT EXISTS recruit_reject_recruitment_id_idx ON recruits using btree(reject_recruitment_id)WITH (deduplicate_items=True);CREATE INDEX IF NOT EXISTS recruit_reject_name_vk_upper_idx ON recruits (UPPER(reject_name_vk) varchar_pattern_ops);CREATE INDEX IF NOT EXISTS recruits_convertation_reserved_date_time_idxON recruits(convertation_reserved_date_time)WITH (deduplicate_items=True);create indexifnot exists recruit_xml_export_list_s3url_upper_idx on recruit_xml_export_listusing btree(upper(s3url) varchar_pattern_ops)WITH (deduplicate_items=True);CREATE INDEXifnot exists recruit_xml_export_list_s3Url_gin_idx ON recruit_xml_export_listUSING gin (upper(s3url) gin_trgm_ops);analyze recruits;analyze recruit_xml_export_list;Выполнить скрипт на бд ervu_person_registry исправляющий записи в истории, для которых некорректно указан источник изменений
-- Все записи с event ='При конвертации поступили сведения о смене ВК'WITH conversion_events AS (select recruit_id, date_time AS conv_date_timeFROM recruits_historyWHERE event in ('При конвертации поступили сведения о смене ВК','Запись обновлена сведениями ГИР')),-- Все записи с status ='1.1'AND source ='2'source_status_events AS (SELECT *FROM recruits_historyWHERE status ='1.1'AND source ='2'),-- Некорректные записиincorrect_events AS (SELECT sse.*FROM source_status_events sseJOIN conversion_events ce ON ce.recruit_id = sse.recruit_id AND ce.conv_date_time < sse.date_time -- проверяем для одного recruit_id, что запись с event наступила раньше чем запись со status ='1.1'и source ='2'WHERE NOT EXISTS ( -- проверяем, что нет других записей с между двумя нашими, у которых статус1.1и source =2SELECT1FROM recruits_history rhwhere rh.recruit_id = sse.recruit_idAND rh.date_time > ce.conv_date_timeAND rh.date_time < sse.date_timeAND rh.status ='1.1'AND rh.source ='2'))update recruits_history set source ='1'where id in (select id from incorrect_events);Прошу выполнить скрипт на бд ervu_person_registry для проставления rejectRecruitmentId рекрутам отклоненным ВК по задаче _Конвертация_Массовый возврат записей в ВК. Не дожидаясь отработки скрипта, перейти к следующему шагу.
WITH find_recruits AS (SELECT id AS rec_idFROM recruitsWHERE recruits.reject_recruitment_id IS NULLAND recruits.system_pgs_status ='12.2'),latest_history AS (SELECTh.recruit_id AS history_recruit_id,h.target_recruitment_id,ROW_NUMBER() OVER (PARTITION BY h.recruit_idORDER BY h.date_time DESC) AS date_rankFROM recruits_history hWHEREh.recruit_id IN (SELECT rec_id FROM find_recruits)AND h.status ='12.2'AND h.event ='Отклонено включение сведений в реестр')UPDATE recruitsSETreject_recruitment_id = lh.target_recruitment_id,reject_name_vk = rec.nameFROM (SELECTlh.history_recruit_id,lh.target_recruitment_idFROM latest_history lhWHERE lh.date_rank =1) lhLEFT JOIN recruitment rec ON rec.id = lh.target_recruitment_idWHERErecruits.id = lh.history_recruit_idAND recruits.reject_recruitment_id IS NULL;
4.Сборка и запуск ervu-extract-from-registry-provider
- Собрать и запустить сервис стандартным образом через helm
5.Сборка и запуск stat-report-scheduler
- Собрать и запустить сервис стандартным образом через helm
- Скопировать данные из бд ervu_person_registry таблицы report в таблицу report базы stat_report_scheduler
- Выполнить скрипт на базе stat_report_scheduler
update report set status = 'FAILED' where status not in ('FINISHED', 'FAILED', 'FINISHED_WITHOUT_DATA') and EXTRACT(MINUTE FROM (now() - created_at)) > 5;update report set finished_at = now() where finished_at is null;ALTER TABLE report ALTER COLUMN status SET DEFAULT 'NEW'; |
6.Установка сервисов Микорд
Перед началом установки выполнить скрипт в БД endpoints_access_info
INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-account-applications-backend', 'Manual', 'Get', '/service/account-applications', '/**', '{"perms": ["responsible_for_information_security","responsible_for_internal_control","security_administrator"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-account-applications-backend', 'Manual', 'Post', '/service/account-applications', '/**', '{"perms": ["responsible_for_information_security","responsible_for_internal_control","security_administrator"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-account-applications-backend', 'Manual', 'Put', '/service/account-applications', '/**', '{"perms": ["responsible_for_information_security","responsible_for_internal_control","security_administrator"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-account-applications-backend', 'Manual', 'Delete', '/service/account-applications', '/**', '{"perms": ["responsible_for_information_security","responsible_for_internal_control","security_administrator"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-account-applications-backend', 'Manual', 'Patch', '/service/account-applications', '/**', '{"perms": ["responsible_for_information_security","responsible_for_internal_control","security_administrator"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-dashboard-backend', 'Manual', 'Get', '/service/dashboard', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-dashboard-backend', 'Manual', 'Post', '/service/dashboard', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-dashboard-backend', 'Manual', 'Put', '/service/dashboard', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-dashboard-backend', 'Manual', 'Delete', '/service/dashboard', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-dashboard-backend', 'Manual', 'Patch', '/service/dashboard', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-business-metrics-backend', 'Manual', 'Get', '/service/business-metrics', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-business-metrics-backend', 'Manual', 'Post', '/service/business-metrics', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-business-metrics-backend', 'Manual', 'Put', '/service/business-metrics', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-business-metrics-backend', 'Manual', 'Delete', '/service/business-metrics', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual');INSERT INTO access_info (id, app_name, pkg, method, ingress_path, path, rules, manual, modified_by)VALUES (uuid_generate_v4(), 'ervu-business-metrics-backend', 'Manual', 'Patch', '/service/business-metrics', '/**', '{"perms": ["gomu_specialist","gomu_observer","military_district_observer","military_commissar","military_commissariat_observer"]}', true, 'Manual'); |
- Собрать и запустить стандартным образом через helm
7.Сборка и запуск ervu-dashboard-etl
- Остановить сервис ervu-dashboard-etl
Удалить индексы в БД ervu_dashboard:
DROP INDEX IF EXISTS idx_citizen_recruitment_id;DROP INDEX IF EXISTS idx_citizen_target_recruitment_id;DROP INDEX IF EXISTS idx_citizen_marital_status;DROP INDEX IF EXISTS idx_citizen_gender;DROP INDEX IF EXISTS citizen_recruit_id_idx;DROP INDEX IF EXISTS citizen_recruitment_id_idx;DROP INDEX IF EXISTS citizen_age_residence_full_name_idx;DROP INDEX IF EXISTS recruitment_idm_id_idx;DROP INDEX IF EXISTS recruitment_shortname_idx;DROP INDEX IF EXISTS citizen_complex_filters_recruit_id_idx;DROP INDEX IF EXISTS citizen_education_diplomas_received_recruit_id_idx;DROP INDEX IF EXISTS citizen_guardianship_recruit_id_idx;DROP INDEX IF EXISTS citizen_sports_categories_recruit_id_idx;DROP INDEX IF EXISTS citizen_spouse_recruit_id_idx;DROP INDEX IF EXISTS citizen_work_activity_recruit_id_idx;DROP INDEX IF EXISTS citizenship_recruit_id_idx;DROP INDEX IF EXISTS citizenship_foreign_recruit_id_idx;DROP INDEX IF EXISTS deputy_recruit_id_idx;DROP INDEX IF EXISTS disability_recruit_id_idx;DROP INDEX IF EXISTS disease_recruit_id_idx;DROP INDEX IF EXISTS drivers_licence_recruit_id_idx;DROP INDEX IF EXISTS medical_authorities_recruit_id_idx;DROP INDEX IF EXISTS passport_recruit_id_idx;DROP INDEX IF EXISTS property_recruit_id_idx;DROP INDEX IF EXISTS prosecution_recruit_id_idx;DROP INDEX IF EXISTS punishment_recruit_id_idx;DROP INDEX IF EXISTS subpoena_recruit_id_idx;DROP INDEX IF EXISTS temporary_measures_recruit_id_idx;DROP INDEX IF EXISTS idx_edu_code_spec_doc_rus_trgm;DROP INDEX IF EXISTS idx_edu_form_study_trgm;DROP INDEX IF EXISTS idx_edu_obtaining_vus_trgm;DROP INDEX IF EXISTS idx_edu_code_profession_trgm;DROP INDEX IF EXISTS idx_edu_women_obtaining_prof_trgm;DROP INDEX IF EXISTS idx_edu_info_vus_doc_rus_trgm;DROP INDEX IF EXISTS idx_edu_code_spec_doc_foreign_trgm;DROP INDEX IF EXISTS idx_edu_name_spec_doc_foreign_trgm;DROP INDEX IF EXISTS idx_edu_obtaining_vus_doc_foreign_trgm;DROP INDEX IF EXISTS idx_edu_inn;DROP INDEX IF EXISTS idx_edu_ogrn;DROP INDEX IF EXISTS idx_edu_kpp;DROP INDEX IF EXISTS idx_edu_order_number;DROP INDEX IF EXISTS idx_edu_order_number_deduction;DROP INDEX IF EXISTS idx_edu_order_number_restore;DROP INDEX IF EXISTS idx_edu_reg_number_doc_rus;DROP INDEX IF EXISTS idx_edu_series_number_doc_foreign;DROP INDEX IF EXISTS idx_edu_start_date_edu;DROP INDEX IF EXISTS idx_edu_receipt_date;DROP INDEX IF EXISTS idx_edu_planned_graduation_date;DROP INDEX IF EXISTS idx_edu_order_date;DROP INDEX IF EXISTS idx_edu_date_deduction;DROP INDEX IF EXISTS idx_edu_completion_date;DROP INDEX IF EXISTS idx_edu_restore_date;DROP INDEX IF EXISTS idx_edu_start_date_training;DROP INDEX IF EXISTS idx_edu_start_date_academic;DROP INDEX IF EXISTS idx_edu_end_date_academic;DROP INDEX IF EXISTS idx_edu_start_date_maternity;DROP INDEX IF EXISTS idx_edu_end_date_maternity;DROP INDEX IF EXISTS idx_edu_start_date_military_center;DROP INDEX IF EXISTS idx_edu_end_date_military_center;DROP INDEX IF EXISTS idx_edu_start_date_mil_department;DROP INDEX IF EXISTS idx_edu_end_date_mil_department;DROP INDEX IF EXISTS idx_edu_date_issue_doc_rus;DROP INDEX IF EXISTS idx_edu_date_doc_foreign;DROP INDEX IF EXISTS idx_edu_student_status;DROP INDEX IF EXISTS idx_edu_education_level_student;DROP INDEX IF EXISTS idx_edu_receiving_education_first_time;DROP INDEX IF EXISTS idx_edu_successful_mil_dep;DROP INDEX IF EXISTS idx_edu_name_edu_organization_trgm;DROP INDEX IF EXISTS idx_edu_name_education_program_trgm;DROP INDEX IF EXISTS idx_edu_name_profession_trgm;DROP INDEX IF EXISTS idx_edu_name_edu_org_doc_rus_trgm;DROP INDEX IF EXISTS idx_edu_name_spec_doc_rus_trgm;DROP INDEX IF EXISTS idx_edu_name_edu_org_doc_foreign_trgm;DROP INDEX IF EXISTS idx_citizen_work_job_title_trgm;DROP INDEX IF EXISTS idx_citizen_work_org_name_trgm;DROP INDEX IF EXISTS idx_citizen_work_place_work_trgm;DROP INDEX IF EXISTS idx_citizen_work_employer_cat_trgm;DROP INDEX IF EXISTS idx_citizen_work_org_address_trgm;DROP INDEX IF EXISTS idx_citizen_work_inn;DROP INDEX IF EXISTS idx_citizen_work_ogrn;DROP INDEX IF EXISTS idx_citizen_work_kpp;DROP INDEX IF EXISTS idx_citizen_work_ogrn_ip;DROP INDEX IF EXISTS idx_citizen_work_date_hr_event;DROP INDEX IF EXISTS idx_citizen_work_start_parental_leave;DROP INDEX IF EXISTS idx_citizen_work_end_parental_leave;DROP INDEX IF EXISTS idx_citizen_work_date_reg_ip;DROP INDEX IF EXISTS idx_citizen_work_date_dereg_ip;DROP INDEX IF EXISTS idx_citizen_work_date_term_reg_ip;DROP INDEX IF EXISTS idx_citizen_work_date_reg_self;DROP INDEX IF EXISTS idx_citizen_work_date_dereg_self;DROP INDEX IF EXISTS idx_citizen_work_employer_status;DROP INDEX IF EXISTS idx_citizen_work_type_separate_division;DROP INDEX IF EXISTS idx_citizen_work_type_hr_event;DROP INDEX IF EXISTS idx_citizen_last_name_trgm;DROP INDEX IF EXISTS idx_citizen_first_name_trgm;DROP INDEX IF EXISTS idx_citizen_middle_name_trgm;DROP INDEX IF EXISTS idx_citizen_snils_trgm;DROP INDEX IF EXISTS idx_citizen_inn_trgm;DROP INDEX IF EXISTS idx_citizen_id_ern_trgm;DROP INDEX IF EXISTS idx_citizen_phone_trgm;DROP INDEX IF EXISTS idx_citizen_email_trgm;DROP INDEX IF EXISTS idx_citizen_birth_place_trgm;DROP INDEX IF EXISTS idx_citizen_residence_trgm;DROP INDEX IF EXISTS idx_citizen_address_place_stay_trgm;DROP INDEX IF EXISTS idx_citizen_type_place_stay_trgm;DROP INDEX IF EXISTS idx_citizen_address_actual_trgm;DROP INDEX IF EXISTS idx_citizen_driver_license_trgm;DROP INDEX IF EXISTS idx_citizen_right_deferment;DROP INDEX IF EXISTS idx_citizen_took_break;DROP INDEX IF EXISTS idx_citizen_medic;DROP INDEX IF EXISTS idx_citizen_sports_category;DROP INDEX IF EXISTS idx_citizen_tractor_license;DROP INDEX IF EXISTS idx_citizen_is_wanted;DROP INDEX IF EXISTS idx_citizen_is_in_prison;DROP INDEX IF EXISTS idx_citizen_acquired_citizenship;DROP INDEX IF EXISTS idx_citizen_urgent_service;DROP INDEX IF EXISTS idx_citizen_contract_service;DROP INDEX IF EXISTS idx_citizen_mobilization;DROP INDEX IF EXISTS idx_citizen_personal_data;DROP INDEX IF EXISTS idx_citizen_sign_deferred_release;DROP INDEX IF EXISTS idx_citizen_having_sport_title;DROP INDEX IF EXISTS idx_citizen_employed;DROP INDEX IF EXISTS idx_citizen_active_reg_ip;DROP INDEX IF EXISTS idx_citizen_active_parental_leave;DROP INDEX IF EXISTS idx_citizen_self_employed;DROP INDEX IF EXISTS idx_citizen_has_disease;DROP INDEX IF EXISTS idx_citizen_has_vich;DROP INDEX IF EXISTS idx_citizen_registered_in_pnd;DROP INDEX IF EXISTS idx_citizen_has_disability;DROP INDEX IF EXISTS idx_citizen_is_incompetent;DROP INDEX IF EXISTS idx_citizen_has_deferment;DROP INDEX IF EXISTS idx_citizen_has_deferment_right;DROP INDEX IF EXISTS idx_citizen_has_exemption;DROP INDEX IF EXISTS idx_citizen_is_guardian;DROP INDEX IF EXISTS idx_citizen_birth_date;DROP INDEX IF EXISTS idx_citizen_issue_date;DROP INDEX IF EXISTS idx_citizen_died_date;DROP INDEX IF EXISTS idx_citizen_start_date_residence;DROP INDEX IF EXISTS idx_citizen_end_date_residence;DROP INDEX IF EXISTS idx_citizen_start_date_place_stay;DROP INDEX IF EXISTS idx_citizen_end_date_place_stay;DROP INDEX IF EXISTS idx_citizen_date_info_actual;DROP INDEX IF EXISTS idx_citizen_date_loss_info_actual;DROP INDEX IF EXISTS idx_citizen_update_date;DROP INDEX IF EXISTS idx_citizen_date_registration;DROP INDEX IF EXISTS idx_citizen_date_deregistration;DROP INDEX IF EXISTS idx_citizen_start_date_right;DROP INDEX IF EXISTS idx_citizen_end_date_right;DROP INDEX IF EXISTS idx_citizen_start_date_decision;DROP INDEX IF EXISTS idx_citizen_end_date_decision;DROP INDEX IF EXISTS idx_citizen_age;DROP INDEX IF EXISTS idx_citizen_number_children;DROP INDEX IF EXISTS idx_citizen_number_children_18_old;DROP INDEX IF EXISTS idx_citizen_is_registered;DROP INDEX IF EXISTS idx_citizen_passport_series;DROP INDEX IF EXISTS idx_citizen_passport_number;DROP INDEX IF EXISTS idx_citizen_medical_requirements;DROP INDEX IF EXISTS idx_citizen_deferment_liberation;DROP INDEX IF EXISTS idx_citizen_education;DROP INDEX IF EXISTS idx_citizen_employment;DROP INDEX IF EXISTS idx_citizen_reason_registration;DROP INDEX IF EXISTS idx_citizen_disability_group;DROP INDEX IF EXISTS idx_citizen_dispensary_registration_code;DROP INDEX IF EXISTS idx_citizen_region_birth;DROP INDEX IF EXISTS idx_citizen_city_birth;DROP INDEX IF EXISTS idx_citizen_source_info_actual;DROP INDEX IF EXISTS idx_citizen_country_birth;DROP INDEX IF EXISTS idx_citizen_fact_issuance_military_registration;DROP INDEX IF EXISTS idx_citizen_grounds_exemption;DROP INDEX IF EXISTS idx_citizen_decision_number;DROP INDEX IF EXISTS idx_citizen_defer_conscription;DROP INDEX IF EXISTS idx_citizen_deferment_decision_type;DROP INDEX IF EXISTS idx_citizen_system_pgs_status;DROP INDEX IF EXISTS idx_citizen_full_name_trgm;DROP INDEX IF EXISTS idx_citizen_spouse_kinship_type_trgm;DROP INDEX IF EXISTS idx_citizen_spouse_full_name_trgm;DROP INDEX IF EXISTS idx_citizen_spouse_birth_date;DROP INDEX IF EXISTS idx_citizen_spouse_death_date;DROP INDEX IF EXISTS idx_citizen_spouse_marriage_date;DROP INDEX IF EXISTS idx_citizen_spouse_divorce_date;DROP INDEX IF EXISTS idx_citizen_spouse_information_excluded;DROP INDEX IF EXISTS idx_citizen_spouse_death_az_number;DROP INDEX IF EXISTS idx_citizen_spouse_marriage_az_number;DROP INDEX IF EXISTS idx_citizen_spouse_divorce_az_number;Сборка и запуск сервиса ervu-dashboard-etl
- Внести правку в values.yaml сервиса ervu-dashboard-etl. Сменить значение переменных JOBS_ON_STARTUP и JOBS_CRON на:
- name: JOBS_ ON_STARTUP
value: 'predictive_metrics/predictive.hwf'- name: JOBS_CRON
value: '0,30_*_*_*_*@job_general.hwf 0_0_1_1_*@predictive_metrics/ predictive.hwf 30_20_30_7_3@jobs_once_a_day/job_info_recruits_once.hwf'!!!ВАЖНО. ОБРАТИТЕ ВНИМАНИЕ!!!
В переменной JOBS_CRON прописано крон выражение для одноразового запуска джобы копирования рекрутов:
(30_20_30_7_3@jobs_once_a_day/job_info_recruits_once.hwf).
В зависимости от даты и времени деплоя сервиса, данное выражение крона необходимо будет скорректировать.
Описание:
30 – во сколько минут (в нашем примере 30 минута) !!!!НЕОБХОДИМО ПОСТАВИТЬ ВРЕМЯ так, чтобы с момента деплоя прошло еще 15 минут. Т.е. если деплоим в нулевую минуту, то здесь прописываем 15.
20 – во сколько часов (в нашем примере в 20часов, т.е. 8 вечера)
30 – день месяца (в нашем примере 30го числа)
7 – седьмого месяца (в нашем примере месяц июль)
3 – день недели (в нашем примере среда)
Т.е. в текущем примере джоба стартанет 30 июля в среду в 20:30.
Корректировку крон выражения делаем только для данной джобы.
- Передеплоить сервис
8. Запуск всех сервисов
9.Выполнение реконсиляции военкоматов для ervu_journal
Выполнить строго после установки сервиса ervu-journal-service и ervu-extract-from-registry-provider
- Выполнить cURL, используя токен пользователя с ролью Администратор ПОИБ
curl --location --request POST '<<host>>/service/idm/reconcile/domain/to/kafka/v1' \
--header 'Authorization: Bearer <<токен Администратор ПОИБ>>' \
--header 'Content-Type: application/json'
10.Выполнение реконсиляции рекрутов
Реконсилсяция запускается строго после выполнения пунктов
Сборка и запуск ervu-subpoena-registry
Сборка и запуск ervu-summon-list-registry
Сборка и запуск ervu-incidents-service
Сборка и запуск ervu-person-registry
- Для запуска реконсиляции необходимо выполнить курл (время выполнения 5 минут):
- curl --location --request GET '{{ingress}}/service/ervu-person-registry/reconcile' \
--header 'Content-Type: application/json' \
--header 'Authorization: {{токен}}'
- curl --location --request GET '{{ingress}}/service/ervu-person-registry/reconcile' \
- Через 10 минут после запуска курла из п.2 проверить топик ervu.recruit.reconcile, что туда пишутся записи и кол-во записей увеличивается (с паузами, не моментально). Результат в виде скрина скинуть в чат сопровождения
- Через 30 минут после запуска курла
из п.2 проверить в БД ervu_person_registry, в таблице reconcile_status
столбец batch_num НЕ РАВЕН нулю и примерно каждые 30 секунд в нём
увеличивается цифра. Результат в виде скрина скинуть в чат сопровождения
После установки каждого сервиса писать в чат "ЕРВУ сопровождение" в экспрессе о результате установки и скриншот, какая версия сервиса после установки, а также написать в момент запуска курла реконсиляции из п.2
11.Обновление bpmn
Скачать содержимое https://git.ervu.rt-sk.ru/ervu/source/ervu-bpmn/-/tree/release/ervu/1.11.3/processes
Распаковать скачанный zip-архив
Запустить curl для каждого процесса из списка под токеном пользователя у которого есть роль "Администратор ПОИБ", где:
<<host>> - host стенда,
<<токен Администратор ПОИБ>> - токен пользователя у которого есть роль "Администратор ПОИБ"
<<pathToFile>> - путь к файлу bpmn процесса
curl обновления процесса
|
Список изменённых процессов:
[ |
12.Выполнение проверок успешного выполнения скриптов
1.Проверка обновления исторических записей в ervu-journal-service (после полного выполнения п. 1 "Сборка и запуск ervu-journal-service)
После выполнения скрипта в консоли должно отобразиться
NOTICE: Обновление завершено за (время выполнения)Через
30 минут после запуска скрипта на обновление исторических записей
проверить факт заполнения в таблице выполнив 2 скрипта и сравнив
результат между собой, результат в виде скрина скинуть в чат
сопровождения с тегом на Воронин Андрей Сергеевич :
SELECT count(*) FROM object_versions WHERE object_type = 'Recruit' AND convert_from("object", 'UTF8')::json ->> 'sourceLastUpdate' = '1';SELECT count(*) FROM object_versions WHERE object_type = 'Recruit' AND source_last_update = 1; |
2. Проверка обновления исторических записей ervu_person_registry
-- Все записи с event = 'При конвертации поступили сведения о смене ВК'WITH conversion_events AS ( select recruit_id, date_time AS conv_date_time FROM recruits_history WHERE event in ('При конвертации поступили сведения о смене ВК', 'Запись обновлена сведениями ГИР')), -- Все записи с status = '1.1' AND source = '2'source_status_events AS ( SELECT * FROM recruits_history WHERE status = '1.1' AND source = '2'),-- Некорректные записиincorrect_events AS ( SELECT sse.* FROM source_status_events sse JOIN conversion_events ce ON ce.recruit_id = sse.recruit_id AND ce.conv_date_time < sse.date_time -- проверяем для одного recruit_id, что запись с event наступила раньше чем запись со status = '1.1' и source = '2' WHERE NOT EXISTS ( -- проверяем, что нет других записей с между двумя нашими, у которых статус 1.1 и source = 2 SELECT 1 FROM recruits_history rh where rh.recruit_id = sse.recruit_id AND rh.date_time > ce.conv_date_time AND rh.date_time < sse.date_time AND rh.status = '1.1' AND rh.source = '2' ))select count(*) from recruits_history where id in (select id from incorrect_events); |
3. Проверка скрипт для проставления rejectRecruitmentId рекрутам отклоненным ВК по задаче _Конвертация_Массовый возврат записей в ВК.
--должен вернуть 0SELECT count(*) from recruits where recruits.reject_recruitment_id is null and recruits.system_pgs_status = '12.2'; |
4. Проверка обновления записей в БД endpoints_access_info:
Проверка, что джоба запустилась:
- Формируем логи после запуска сервиса ervu-dashboard-etl
- Ищем строку лога содержащую текст: job_info_recruits_once - Start of workflow execution
!!! Через 1 час, для проверки наполнения данными, сделать sql запросы в БД:
- select count(*) from ervu_dashboard.citizen_guardianship;
- select count(*) from ervu_dashboard.citizen_child;
- select count(*) from ervu_dashboard.drivers_licence;
- select count(*) from ervu_dashboard.passport;
- select count(*) from ervu_dashboard.punishment;
5. Проверка реконсиляции военкоматов (после полного выполнения п. 32)
Через 10 минут после запуски курла проверить топик idmv2.domain.reconcilation, убедиться, что записи попали в топик
Через 30 минут после запуска курла проверить, что в БД ervu_journal и в БД ervu_extract_from_registry_provider в таблицах idm_domain заполнена колонка short_name
6. Проверка наличия записей в топике ervu.recruit.reconcile
Через 10 минут после запуска курла из п.2 проверить топик ervu.recruit.reconcile, что туда пишутся записи и кол-во записей увеличивается (с паузами, не моментально). Результат в виде скрина скинуть в чат сопровождения
7. Проверка наличия записей в БД ervu_person_registry
Через 30 минут после запуска курла из п.2 проверить в БД ervu_person_registry, в таблице reconcile_status столбец batch_num НЕ РАВЕН нулю и примерно каждые 30 секунд в нём увеличивается цифра. Результат в виде скрина скинуть в чат сопровождения
План отката
- Связаться с разработчиками для корректного отката изменений БД
- Откатить обновленные файлы/образы приложений
- Откатить изменения конфигурации
Добавить комментарий